home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / xlib03.zip / XPOINT.ASM < prev    next >
Assembly Source File  |  1993-04-05  |  4KB  |  110 lines

  1. ;-----------------------------------------------------------------------
  2. ; MODULE XPOINT
  3. ;
  4. ; Point functions all MODE X 256 Color resolutions
  5. ;
  6. ; Compile with Tasm.
  7. ; C callable.
  8. ;
  9. ;
  10. ; ****** XLIB - Mode X graphics library                ****************
  11. ; ******                                               ****************
  12. ; ****** Written By Themie Gouthas                     ****************
  13. ; ****** Aeronautical Research Laboratory              ****************
  14. ; ****** Defence Science and Technology Organisation   ****************
  15. ; ****** Australia                                     ****************
  16. ;
  17. ; egg@dstos3.dsto.gov.au
  18. ; teg@bart.dsto.gov.au
  19. ;-----------------------------------------------------------------------
  20.  
  21.  
  22. include xlib.inc
  23. include xpoint.inc
  24.  
  25.     .code
  26.  
  27.  
  28. ;-----------------------------------------------------------------------
  29. ; Mode X (256 color mode) write pixel routine.
  30. ; No clipping is performed.
  31. ;
  32. ; Based on code originally published in DDJ Mag by M. Abrash
  33. ;
  34. ; C near-callable as:
  35. ;    void x_put_pix(int X, int Y, int PageOffset, int Color);
  36. ;
  37. ;
  38.  
  39. _x_put_pix  proc    
  40.     ARG X:word,Y:word,PgOfs:word,Color:word
  41.     push bp                   ;preserve caller's stack frame
  42.     mov  bp,sp                ;point to local stack frame
  43.  
  44.     mov  ax,[_ScrnLogicalByteWidth]
  45.     mul  [Y]                  ;offset of pixel's scan line in page
  46.     mov  bx,[X]
  47.     shr  bx,2                 ;X/4 = offset of pixel in scan line
  48.     add  bx,ax                ;offset of pixel in page
  49.     add  bx,[PgOfs]           ;offset of pixel in display memory
  50.     mov  ax,SCREEN_SEG
  51.     mov  es,ax                ;point ES:BX to the pixel's address
  52.  
  53.     mov  cl,byte ptr [X]
  54.     and  cl,011b              ;CL = pixel's plane
  55.     mov  ax,0100h + MAP_MASK  ;AL = index in SC of Map Mask reg
  56.     shl  ah,cl                ;set only the bit for the pixel's
  57.                   ; plane to 1
  58.     mov  dx,SC_INDEX          ;set the Map Mask to enable only the
  59.     out  dx,ax                ; pixel's plane
  60.  
  61.     mov  al,byte ptr [Color]
  62.     mov  es:[bx],al           ;draw the pixel in the desired color
  63.  
  64.     pop   bp                  ;restore caller's stack frame
  65.     ret
  66. _x_put_pix   endp
  67.  
  68. ;-------------------------------------------------------------------------
  69. ; Mode X (320x240, 256 colors) read pixel routine. Works on all VGAs.
  70. ; No clipping is performed.
  71. ;
  72. ; Based on code originally published in DDJ Mag by M. Abrash
  73. ;
  74. ; C near-callable as:
  75. ;    unsigned int x_get_pix(int X, int Y, unsigned int PageBase);
  76.  
  77.  
  78. _x_get_pix   proc
  79.     ARG x:word,y:word,PageBase:word
  80.     push bp                   ;preserve caller's stack frame
  81.     mov  bp,sp                ;point to local stack frame
  82.  
  83.     mov  ax,[_ScrnLogicalByteWidth]
  84.     mul  [Y]                  ;offset of pixel's scan line in page
  85.     mov  bx,[X]
  86.     shr  bx,1
  87.     shr  bx,1                 ;X/4 = offset of pixel in scan line
  88.     add  bx,ax                ;offset of pixel in page
  89.     add  bx,[PageBase]        ;offset of pixel in display memory
  90.     mov  ax,SCREEN_SEG
  91.     mov  es,ax                ;point ES:BX to the pixel's address
  92.  
  93.     mov  ah,byte ptr [X]
  94.     and  ah,011b              ;AH = pixel's plane
  95.     mov  al,READ_MAP          ;AL = index in GC of the Read Map reg
  96.     mov  dx,GC_INDEX          ;set the Read Map to read the pixel's
  97.     out  dx,ax                ; plane
  98.  
  99.     mov  al,es:[bx]           ;read the pixel's color
  100.     sub  ah,ah                ;convert it to an unsigned int
  101.  
  102.     pop  bp                   ;restore caller's stack frame
  103.         ret
  104. _x_get_pix   endp
  105.         end
  106.  
  107.  
  108.     end
  109.  
  110.